//===- SwapBinopArgsPass.h - example LLVMIR pass ----------------*- C++ -*-===//
// Copyright: public domain
//===----------------------------------------------------------------------===//
//
// Interface for the example LLVMIR pass which swaps operands in all binary
// operators.
//
//===----------------------------------------------------------------------===//

// В LLVM #pragma once не используется в исходниках проходов
#ifndef SWAPBINOPARGSPASS_H
#define SWAPBINOPARGSPASS_H

#include "llvm/IR/PassManager.h"
#include "llvm/Passes/PassBuilder.h"

/// Пример LLVMIR Pass по функциям.
class SwapBinopArgsPass : public llvm::PassInfoMixin<SwapBinopArgsPass> {
public:
  // Это Function проход, поэтому параметры Function и FunctionAnalysisManager
  llvm::PreservedAnalyses run(llvm::Function &F,
                              llvm::FunctionAnalysisManager &AM);

  // Эта ф-ция используется для обеспечения доступа к данному проходу,
  // собранному в отдельной динамичесмкой библиотеке, со стороны
  // инструментов типа clang, opt
  static void registerCallbacks(llvm::PassBuilder &PB);

};

#endif // SWAPBINOPARGSPASS_H
